package com.itestor.iptv.modules.common.actions;

import java.util.ArrayList;
import java.util.Collection;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.itestor.iptv.global.GlobalConstant;
import com.itestor.iptv.global.exception.WebApplicationException;
import com.itestor.iptv.global.utils.LoggerUtils;
import com.itestor.iptv.modules.common.service.UserService;
import com.itestor.iptv.modules.common.utils.CommonConstant;
import com.itestor.iptv.modules.common.vo.User;


public class UserAddAction extends Action {

	/**
	 * Logger for this class.
	 */
	private static final Logger logger = Logger.getLogger(UserAddAction.class);

	/**
	 * UserService.
	 */
	private UserService userService;
	
	/**
	 * @param mapping struts mapping
	 * @param request request
	 * @param form action form
	 * @param response response
	 * @return action forward
	 * @throws Exception any exception
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String name = request.getParameter("name");
		String role = request.getParameter("role");
		String email = request.getParameter("email");
		String phone = request.getParameter("phone");
		String mobile = request.getParameter("mobile");

		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		user.setRealname(name);
		Collection<String> rolenames = new ArrayList<String>();
		rolenames.add(role);
		user.setRolenames(rolenames);
		user.setEmail(email);
		user.setPhone(phone);
		user.setMobile(mobile);

		request.setAttribute(CommonConstant.REQUEST_ATTR_USER, user);

		LoggerUtils.logActionInfo("Add the user - username: " + username, logger, request);
		if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {
			throw new WebApplicationException("global.error.submit", GlobalConstant.PROPERTIES_BUNDLE);
		}

		if (null != userService.get(username)) {
			throw new WebApplicationException("common.user.error.existed", CommonConstant.PROPERTIES_BUNDLE);
		}

		userService.add(user);

		return mapping.findForward(GlobalConstant.FORWARD_SUCCESS);
	}

	/**
	 * @param pUserService the userService to set
	 */
	public void setUserService(UserService pUserService) {
		userService = pUserService;
	}

}
